//
//
//
//class Gloves {
//public:
//    int findMinimum(int n, vector<int> left, vector<int> right) {
//        int l = 26, r = 26, lm = 0, rm = 0, lx = 0, rx = 0, ls = 0, rs = 0;
//        for (int i = 0; i < n; i++)
//        {
//            if (left[i] == 0)
//            {
//                rs += right[i];
//
//            }
//            else if (right[i] == 0)
//            {
//
//                ls += left[i];
//            }
//            else
//            {
//                if (left[i] < l)
//                {
//                    l = left[i];
//                }
//                if (right[i] < r)
//                {
//                    r = right[i];
//                }
//                lm += left[i];
//                rm += right[i];
//            }
//
//
//        }
//        if (l != 1)
//            lm = lm - l + 1;
//        if (r != 1)
//            rm = rm - r + 1;
//        if (lm > rm)
//            return rm + 1 + rs;
//        else
//            return lm + ls + rs + 1;
//
//    }
//};
//
//#include <iostream>
//using namespace std;
//#include<string>
//#include<vector>
//string Getcmpsubstr(string& s1, string& s2)
//{
//    if (s1.size() > s2.size())
//        swap(s1, s2);
//    int start = 0, size_max = 0;
//    vector<vector<int>> MSC(s1.size() + 1, vector<int>(s2.size() + 1, 0));
//    for (int i = 1; i < s1.size(); i++)
//    {
//        for (int j = 0; j < s2.size(); j++)
//        {
//            if (s1[i - 1] == s2[j - 1])
//                MSC[i][j] = MSC[i - 1][j - 1] + 1;
//            if (MSC[i][j] > size_max)
//            {
//                size_max = MSC[i][j];
//                start = i - size_max;
//            }
//        }
//    }
//    return s1.substr(start, size_max);
//}
//int main() {
//    string s1, s2;
//    while (cin >> s1 >> s2)
//    {
//        string substr = Getcmpsubstr(s1, s2);
//        cout << substr << endl;
//    }
//}

#include <iostream>
using namespace std;
#include<vector>
//void fun(string::iterator si1, string::iterator si2, string::iterator end1, string::iterator end2, int& size)
//{
//    if (si1 == end1 || si2 == end2)
//        return;
//    if (*si1 == *si2)
//    {
//        size++;
//        fun(si1 + 1, si2 + 1, end1, end2, size);
//    }
//    else {
//        return;
//    }
//}
//int Get_cmpsize(string& s1, string& s2)
//{
//    int size_max = 0;
//    for (int i = 0; i < s1.size(); i++)
//    {
//        int size = 0;
//        for (int j = 0; j < s2.size(); j++)
//        {
//            if (s1[i] == s2[j])
//            {
//                size++;
//
//                fun(s1.begin() + i + 1, s2.begin() + j + 1, s1.end(), s2.end(), size);
//                if (size > size_max)
//                    size_max = size;
//                if (size > 1)
//                    j += (size - 1);
//                size = 0;
//            }
//        }
//    }
//    return size_max;
//
//}
//int main() {
//    string s1, s2;
//    while (cin >> s1 >> s2)
//    {
//        int size = Get_cmpsize(s1, s2);
//        cout << size << endl;
//    }
//}

int Get_cmpsize(string& s1, string& s2)
{
    int size_max = 0;
    vector<vector<int>> MSC(s1.size() + 1, vector<int>(s2.size() + 1, 0));
    for (int i = 1; i < s1.size(); i++)
    {
        for (int j = 1; j < s2.size(); j++)
        {
            if (s1[i - 1] == s2[j - 1])
                MSC[i][j] = MSC[i - 1][j - 1] + 1;
            if (MSC[i][j] > size_max)
            {
                size_max = MSC[i][j];
            }
        }
    }
    return size_max;
}
int main() {
    string s1, s2;
    while (cin >> s1 >> s2)
    {
        int size = Get_cmpsize(s1, s2);
        cout << size << endl;
    }
}